var express = require('express');
const md5 = require('blueimp-md5')
const { userModel, ChatModel } = require("../bin/model")
var router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) {
  res.render('index', { title: 'Express' });
});

//注册接口
router.post("/register", function (req, res) {
  const { username, password, type } = req.body;
  userModel.findOne({ username }, (_, docs) => {
    if (docs) {
      res.send({ code: 1, msg: "用户已存在" })
    }
    else {
      new userModel({ username, type, password: md5(password) }).save((_, docs) => {
        res.cookie("users", docs._id, { maxAge: 1000 * 60 * 60 * 24 })
        const data = { username, type, _id: docs._id }
        res.send({ code: 0, data })
      })
    }
  })
})


//登录接口
router.post("/login", (req, res) => {
  const { username, password } = req.body;
  userModel.findOne({ username, password: md5(password) }, { password: 0 }, (_, docs) => {
    if (docs) {
      res.cookie("users", docs._id, { maxAge: 1000 * 60 * 60 * 24 })
      res.send({ code: 0, data: docs })
    }
    else {
      res.send({ code: 1, msg: "用户名或密码错误" })
    }
  })
})

//数据更新接口
router.post("/update", (req, res) => {
  const id = req.cookies.users;
  if (!id) {
    return res.send({ code: 1, msg: "用户未登录" })
  }
  else {
    const user = req.body;
    userModel.findByIdAndUpdate({ _id: id }, user, (_, oldData) => {
      if (!oldData) {
        res.clearCookie("users")
        res.send({ code: 1, msg: "用户未登录" })
      }
      else {
        const { _id, username, type } = oldData
        const data = Object.assign(user, { _id, username, type })
        res.send({ code: 0, data })
      }
    })
  }
})

//请求用户数据
router.get('/user', (req, res) => {
  const id = req.cookies.users;
  if (!id) {
    return res.send({ code: 1, msg: "用户未登录" })
  }
  else {
    userModel.findOne({ _id: id }, { password: 0 }, (_, data) => {
      if (!data) {
        res.clearCookie("users")
        res.send({ code: 1, msg: "用户未登录" })
      }
      else {
        res.send({ code: 0, data })
      }
    })
  }
})

//获取用户列表
router.get('/userlist', (req, res) => {
  const { type } = req.query
  userModel.find({ type }, { password: 0 }, (err, user) => {
    res.send({ code: 0, data: user })
  })
})

/*获取当前用户所有相关聊天信息列表
*/
router.get('/msglist', function (req, res) {
  // 获取 cookie 中的 userid
  const usersid = req.cookies.users
  // 查询得到所有 user 文档数组
  userModel.find(function (err, userDocs) {
    // 用对象存储所有 user 信息: key 为 user 的_id, val 为 name 和 header 组成的 user 对象
    const users = {} // 对象容器
    userDocs.forEach(doc => {
      users[doc._id] = { username: doc.username, header: doc.header }
    })
    /*查询 userid 相关的所有聊天信息
    参数 1: 查询条件
    参数 2: 过滤条件
    参数 3: 回调函数
    */
    ChatModel.find({ '$or': [{ from: usersid }, { to: usersid }] }, {password:0,_v:0}, function (err,
      chatMsg) {
      // 返回包含所有用户和当前用户相关的所有聊天消息的数据
      res.send({ code: 0, data: { users, chatMsg } })
    })
  })
})

/*修改指定消息为已读
*/
router.post('/readmsg', function (req, res) {
  // 得到请求中的 from 和 to
  const from = req.body.from
  const to = req.cookies.users
  /*更新数据库中的 chat 数据
  参数 1: 查询条件
  参数 2: 更新为指定的数据对象
  参数 3: 是否 1 次更新多条, 默认只更新一条
  参数 4: 更新完成的回调函数
  */
  ChatModel.update({ from, to, read: false }, { read: true }, { multi: true }, function (err,
    doc) {
    console.log('/readmsg', doc)
    res.send({ code: 0, data: doc.nModified }) // 更新的数量
  })
})

module.exports = router;
